// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
// 引入element UI
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App';
// 引入路由
import router from './router';
//第三方icon
import './assets/myicon/iconfont.css'
// 引入状态管理
import store from './vuex/store';
// 引入icon
import './assets/icon/iconfont.css'
//
import Fragment from 'vue-fragment'
Vue.use(Fragment.Plugin)

// 引入echarts
import echarts from 'echarts'
Vue.prototype.$echarts = echarts

import axios from 'axios';


Vue.prototype.$axios = axios;

Vue.config.productionTip = false;
import 'font-awesome/css/font-awesome.min.css';
// 使用element UI
Vue.use(ElementUI);
// 过滤器
import * as custom from './utils/util'


//异步请求前在header里加入token
axios.interceptors.request.use(
  config => {
    if(config.url==='/user/login'||config.url==='/user/emailQQ' ||config.url==='/user/regist'){
      //如果是登录和注册操作，则不需要携带header里面的token
    }else{
      if (localStorage.getItem('Authorization')) {
        //console.log("token"+localStorage.getItem('Authorization'))
        config.headers.Authorizatior = localStorage.getItem('Authorization');
      }
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  });



//异步请求后，判断token是否过期
axios.interceptors.response.use(
  response => {/*在这里可以设置请求成功的一些设置*/
    let newToken=response.config.headers.token
    localStorage.setItem('x-auth-token', newToken);
    if(response.data.code==-1&&response.status==200){
      this.$message({showClose: true, message:response.data.msg, type: 'warning'});
    };
    return response;
  },
  error => {/*在这里设置token过期的跳转*/
    if (error.response) {
      if(error.response.data.code==401){
        this.$router.push('/login');
      }


    }
  })





// 异步请求前判断请求的连接是否需要token
// 使用 router.beforeEach 注册一个全局前置守卫，判断用户是否登陆
// router.beforeEach((to, from, next) => {
//   if (to.path === '/login') {
//     next();
//   } else {
//     let token = localStorage.getItem('Authorization');
//   // console.log("我是浏览器本地缓存的token: "+token);
//     if (token === 'null' || token === '') {
//       next('/login');
//     } else {
//       next();
//     }
//   }
// });


// router.beforeEach((to, from, next) => {
//   if (to.matched.some(record => record.meta.requireAuth)) { // 判断该路由是否需要登录权限
//     if (localStorage.getItem('Authorization')!=''||localStorage.getItem('Authorization')!=null) { // 判断缓存里面是否有 userName  //在登录的时候设置它的值
//
//       next();
//     } else {
//       next('/login');
//     }
//   } else {
//     next();
//   }
// });
//






Object.keys(custom).forEach(key => {
    Vue.filter(key, custom[key])
})
//
// // 路由拦截器
router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requireAuth)) { // 判断该路由是否需要登录权限
    if (Boolean(localStorage.getItem("Authorization"))) { // 判断缓存里面是否有 userName  //在登录的时候设置它的值
      next();
    } else {
      next({
        path: '/login',
        query: {
          redirect: to.fullPath
        } // 将跳转的路由path作为参数，登录成功后跳转到该路由
      })
    }
  } else {
    next();
  }
});




/* eslint-disable no-new */
new Vue({
    el: '#app',
    router,
  render: h => h(App),
    store, //使用store vuex状态管理
    components: { App },
    template: '<App/>',
    data: {
        // 空的实例放到根组件下，所有的子组件都能调用
        Bus: new Vue()
    }

})
